package com.gitee.tianchaohongyu.jdcl.core;

import org.springframework.lang.Nullable;

import javax.validation.constraints.NotNull;
import java.lang.reflect.Method;

/**
 * 数据清洗服务
 */
public interface CleanService {

  /**
   * 清洗数据
   *
   * @param dataName       数据名称
   * @param data           被清洗的数据
   * @param defineType     定义类型
   * @param cleanerInfo    清洗器信息
   * @param ignoreMismatch 是否忽略类型不匹配，如果此项为true，则但清洗器不支持清洗提供的数据时返回原数据
   */
  @Nullable
  Object clean(@NotNull String dataName, @Nullable Object data, @NotNull Class<?> defineType, @NotNull CleanerInfo cleanerInfo, boolean ignoreMismatch);

  /**
   * 清洗属性
   *
   * @param objectName 对象名称
   * @param object     对象
   */
  void cleanFields(@NotNull String objectName, @NotNull Object object);

  /**
   * 清洗方法参数
   *
   * @param methodName   所在区域名称
   * @param method 方法
   * @param args   参数值列表
   */
  void cleanMethod(@NotNull String methodName, @NotNull Method method, Object[] args);
}
